(* internal type *)


exception NotFound  
exception TypeError
exception ParseError

type 'a if_int = 
	  If of ('a * ('a list)) (* if *)
	| Elsif of ('a * ('a list))
	| Else of ('a list)
;;

type expr = 
	Int of int
  | Float of float
  | Bool of bool
  | String of string
  | Var of string
  | Array of ( expr list)
  | Array_index of string * expr
  | Unary of string * expr 
  | Print of (expr list)
  | Parenthesized of expr 
  | Assignment of expr * expr
  | Binary of expr * string * expr
  | Struct_If of ((expr if_int) list) (* if *)
  | While of (expr * expr list)
  | For of (expr * expr * expr * (expr list) )
  | Decl_Function of (expr * (expr list) * (expr list))
  | Function of (expr * (expr list) )
  | Return of expr
;;